|
Posizione nel menu |
---|
Schizzo → Vincoli Sketcher → Vincolo di rifrazione (Legge di Snell) |
Ambiente |
Sketcher |
Avvio veloce |
K W |
Introdotto nella versione |
0.15 |
Vedere anche |
Nessuno |
Lo strumento Sketcher Vincolo di rifrazione vincola due linee a seguire la legge di rifrazione della luce mentre penetra attraverso un'interfaccia dove si incontrano due materiali con indici di rifrazione diversi. Vedere Legge di Snell.
Legge di Snell
La sequenza dei clic è indicata da frecce gialle con numeri, n1 e n2 mostrano dove sono gli indici di rifrazione
Il vincoli possono essere creati da macro e dalla console Python utilizzando il seguente comando:
Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))
dove:
Sketch
è un oggetto schizzoline1
e pointpos1
sono due numeri interi che identificano il punto finale della linea nel mezzo con indice di rifrazione n1. line1
è l'indice della linea nello schizzo (il valore restituito da Sketch.addGeometry) e pointpos1
dovrebbe essere 1 per il punto iniziale e 2 per il punto finale.line2
e pointpos2
sono gli indici che specificano il punto finale della seconda linea (nel mezzo n2)interface
è l'indice che specifica la linea che indica la posizione dell'interfaccia tra il mezzo n1 e il mezzo n2n2byn1
è un numero in virgola mobile uguale al rapporto degli indici di rifrazione n2/n1La pagina Sketcher scripting spiega i valori che possono essere utilizzati per line1
, pointpos1
, line2
, pointpos2
e interface
e contiene ulteriori esempi su come creare vincoli da script Python.
Esempio:
import Sketcher
import Part
import FreeCAD
StartPoint = 1
EndPoint = 2
f = App.activeDocument().addObject("Sketcher::SketchObject","Sketch")
# add geometry to the sketch
icir = f.addGeometry(Part.Circle(App.Vector(-547.612366,227.479736,0),App.Vector(0,0,1),68.161979))
iline1 = f.addGeometry(Part.LineSegment(App.Vector(-667.331726,244.127090,0),App.Vector(-604.284241,269.275238,0)))
iline2 = f.addGeometry(Part.LineSegment(App.Vector(-604.284241,269.275238,0),App.Vector(-490.940491,256.878265,0)))
# add constraints
# helper constraints:
f.addConstraint(Sketcher.Constraint('Coincident',iline1,EndPoint,iline2,StartPoint))
f.addConstraint(Sketcher.Constraint('PointOnObject',iline1,EndPoint,icir))
# the Snell's law:
f.addConstraint(Sketcher.Constraint('SnellsLaw',iline1,EndPoint,iline2,StartPoint,icir,1.47))
App.ActiveDocument.recompute()